#ifndef MAIN_MENU_H_
#define MAIN_MENU_H_
#define LOG_MENU "menu.log"
#define TIEMPO_ENTRE_ANIMACIONES 60
#define SINGLE_PLAYER 0
#define MULTI_PLAYER 1

#include "Menu/Menu.h"
#include "../Net/Cliente/Cliente.h"
#include "../Net/Servidor/Servidor.h"
#include "../Utils/YamlParser.h"
#include <sstream>
#include <algorithm>
#include <unistd.h>
#include <pthread.h>

using namespace std;

class MainMenu
{
	private:
		Cliente* cliente;
		Servidor* servidor;
		Mix_Music *musica;
		Menu* menu;
		Juego juego;
		vector<InfoPersonaje*> infoPersonajes;
		vector<infoImagen_t> infoImagenes;
		vector<infoSonido_t> infoSonidos;
		
		string mensaje;
		int status;

		InfoPersonaje* infoPersonajeActual;
		int cuadroActual, animacionActual;
		int ancho_nivel;
		int alto_nivel;
		unsigned int modo;
		pid_t pid_servidor;	
		pid_t pid_cliente;	

	public:
	
	    std::ofstream log_menu;
	    
		MainMenu(string yamlfile);
		virtual ~MainMenu();
		Cliente* getCliente();
		Menu* getMenu();
		Servidor* getServidor();
		int getAnchoNivel();
		int getAltoNivel();
		pid_t getPidServidor();	
		pid_t getPidCliente();
		string getSonido();
		Mix_Music* getMusica();
		void setMusica( Mix_Music* mus);
		unsigned int getModo();
		void setModo(unsigned int i);
		void setAnchoNivel(int ancho);
		void setAltoNivel(int alto);
		int cargarMenuInicial(SDL_Surface* pantalla);
		Menu* cargarMenuMulti(string host, string port, vector<string> v_niveles, int cantidad);
		Menu* cargarMenuSingle(vector<string> v_niveles);
		void Mostrar(SDL_Surface* pantalla);
		void handleMenuBotones(SDL_Event event, Menu* menu,  SDL_Surface* pantalla, Juego juego, bool* quit);
		Juego getJuego();
		void DecodificarInfoImagenes(string mensaje);
		void DecodificarInfoSonidos(string mensaje);
		vector<infoImagen_t> getInfoImagenes();
		vector<InfoPersonaje*> getInfoPersonajes();
		vector<infoSonido_t> getInfoSonidos();
		void DecodificarPersonajesHabilitados(string mensaje);

		string getNextMessage();
		void CargarAnimaciones(vector<InfoPersonaje*> infoPersonajes);
		void MostrarAnimacion(int x, int y,string personaje, vector<InfoPersonaje*> infoPersonajes, SDL_Surface* pantalla);
};


#endif
